/**
在 Node.js 中，数据流（Stream）是处理数据的一个重要概念，允许以连续的方式读取或写入数据。数据流是处理大文件或实时数据的有效方式，因为它们可以在数据传输的同时进行处理，而不需要将所有数据加载到内存中。
  1. 数据流的类型
  Node.js 中的数据流主要分为四种类型：

  - 可读流（Readable Stream）: 允许从数据源读取数据。常见的可读流包括文件流和 HTTP 请求流。
    
  - 可写流（Writable Stream）: 允许将数据写入目标。常见的可写流包括文件流和 HTTP 响应流。

  - 双工流（Duplex Stream）: 既可以读取数据，也可以写入数据。常见的双工流包括 TCP 套接字。

  - 转换流（Transform Stream）: 继承自双工流，可以在读写过程中对数据进行转换。常见的转换流用于数据压缩和加密等操作。

  2. 数据流的基本特性
  - 异步处理: 数据流在处理数据时是异步的，这意味着可以在数据到达时立即处理，而不需要等待所有数据都被读取或写入。

  - 内存效率: 数据流允许逐块处理数据，避免了将整个数据加载到内存中的需求，适合处理大文件或实时数据。

  - 事件驱动: 数据流使用事件驱动的方式来处理数据，常用的事件包括  data 、 end 、 error  和  finish 。

  3. 使用数据流的基本方法
   3.1 可读流的使用
  - 创建可读流:
  const fs = require('fs');
  const readableStream = fs.createReadStream('example.txt');

  readableStream.on('data', (chunk) => {
      console.log('读取到的数据块:', chunk.toString());
  });

  readableStream.on('end', () => {
      console.log('数据读取完毕');
  });

  readableStream.on('error', (err) => {
      console.error('读取错误:', err);
  });
   3.2 可写流的使用
  - 创建可写流:
  const fs = require('fs');
  const writableStream = fs.createWriteStream('output.txt');

  writableStream.write('Hello, World!\n');
  writableStream.write('这是一个测试。\n');
  writableStream.end(() => {
      console.log('数据写入完毕');
  });
  4. 管道（Pipe）
  Node.js 提供了  pipe()  方法，可以方便地将可读流的数据传输到可写流中。
  const fs = require('fs');

  const readableStream = fs.createReadStream('example.txt');
  const writableStream = fs.createWriteStream('output.txt');

  readableStream.pipe(writableStream);
  5. 总结
  Node.js 的数据流提供了一种高效、灵活的方式来处理数据。通过使用可读流和可写流，开发者可以轻松地进行数据的读取和写入。而通过事件驱动的方式，流的处理变得更加直观和易于管理。掌握数据流的使用可以帮助开发者在处理大文件、实时数据等场景中提高性能和效率。
 */
